/**
 * 进度计算工具函数
 */

/**
 * 计算匹配进度
 * 匹配：匹配成功 / (匹配成功 + 匹配失败 + 待匹配）
 * 除数为0时，显示100%
 *
 * @param {Object} stats - 状态统计对象
 * @param {number} stats.success - 匹配成功数量
 * @param {number} stats.failed - 匹配失败数量
 * @param {number} stats.pending - 待匹配数量
 * @returns {number} 匹配进度百分比 (0-100)
 */
export const calculateMatchingProgress = stats => {
  const { success = 0, failed = 0, pending = 0 } = stats

  const total = success + failed + pending

  if (total === 0) {
    return 0 // 除数为0时，显示0%
  }

  return Math.round((success / total) * 100)
}

/**
 * 计算向量进度
 * 向量：完成 / (完成 + 向量中 + 匹配成功)
 * 除数为0时，显示0%
 *
 * @param {Object} stats - 状态统计对象
 * @param {number} stats.completed - 完成数量
 * @param {number} stats.vectoring - 向量中数量
 * @param {number} stats.success - 匹配成功数量
 * @returns {number} 向量进度百分比 (0-100)
 */
export const calculateVectorProgress = stats => {
  const { completed = 0, vectoring = 0, success = 0 } = stats

  const total = completed + vectoring + success

  if (total === 0) {
    return 0 // 除数为0时，显示0%
  }

  return Math.round((completed / total) * 100)
}

/**
 * 根据颜色列表计算批次进度
 *
 * @param {Array} colors - 颜色列表
 * @returns {Object} 包含matchingProgress和vectorProgress的对象
 */
export const calculateBatchProgress = colors => {
  // 统计各状态的数量
  const stats = {
    pending: 0,
    success: 0,
    failed: 0,
    empty: 0,
    vectoring: 0,
    completed: 0,
  }

  colors.forEach(color => {
    if (stats.hasOwnProperty(color.status)) {
      stats[color.status]++
    }
  })

  return {
    matchingProgress: calculateMatchingProgress(stats),
    vectorProgress: calculateVectorProgress(stats),
  }
}

/**
 * 根据批次数据和颜色列表计算批次进度并合并到批次数据中
 *
 * @param {Object} batchData - 批次数据
 * @param {Array} colors - 颜色列表
 * @returns {Object} 包含进度信息的批次数据
 */
export const calculateBatchProgressWithData = (batchData, colors) => {
  // 统计各状态的数量
  const stats = {
    pending: 0,
    success: 0,
    failed: 0,
    empty: 0,
    vectoring: 0,
    completed: 0,
  }

  colors.forEach(color => {
    // 从颜色数据中获取状态，支持多种字段名
    const status = color.annotation_status || color.status || color.annotationStatus || 'pending'
    if (stats.hasOwnProperty(status)) {
      stats[status]++
    }
  })

  console.log('进度计算统计:', stats)
  console.log(
    '颜色数据状态分布:',
    colors.map(color => ({
      id: color.id,
      status: color.annotation_status || color.status || color.annotationStatus || 'pending',
      style_code: color.style_code,
      color_code: color.color_code,
    }))
  )

  const progress = {
    matchingProgress: calculateMatchingProgress(stats),
    vectorProgress: calculateVectorProgress(stats),
  }

  // 合并批次数据和进度信息，确保有默认值
  return {
    ...batchData,
    ...progress,
    matchingProgress: progress.matchingProgress ?? 0,
    vectorProgress: progress.vectorProgress ?? 0,
  }
}

/**
 * 根据款式ID和颜色列表计算特定款式的进度
 *
 * @param {string} styleId - 款式ID
 * @param {Array} colors - 颜色列表
 * @returns {Object} 包含matchingProgress和vectorProgress的对象
 */
export const calculateStyleProgress = (styleId, colors) => {
  const styleColors = colors.filter(color => color.styleId === styleId)
  return calculateBatchProgress(styleColors)
}
